﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.Siniflar;
using IKYSWeb.Siniflar;
using Tipler.OzellikTipleri;
using IsKurallari.Yetki;

namespace IKYSWeb.Yetki
{
    [YetkiAttribute(EnumSayfaYetkileri.Yetki)]
    public partial class Yetki_Yetki : BasePage
    {

        #region Session Özellikleri

        private YetkiDataSet YetkiListesi
        {
            get {
                if (Session["LISTE"] == null)
                    Session["LISTE"] = new YetkiDataSet();
                return (YetkiDataSet)Session["LISTE"]; }
            set { Session["LISTE"] = value; }
        }

        private int SecilenYetkiID
        {
            get { return (int)Session["SONKAYITID"]; }
            set { Session["SONKAYITID"] = value; }
        }

        #endregion

        #region Sayfa Açılış

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                txtYetkiAdi.MaxLength = (new YetkiDataSet.YetkiDataTable()).YetkiAdiColumn.MaxLength;

                YetkiListesi = null;
                SecilenYetkiID = -1;

                mv.SetActiveView(vListe);
            }
        }

        #endregion

        #region Butonlar

        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            if (!YetkiAraci.YetkiliMi(EnumYetkiler.YetkiKaydet, Response)) return;

            YetkiDataSet.YetkiRow drYetki;

            if (YetkiListesi == null) YetkiListesi = new YetkiDataSet();

            if (SecilenYetkiID == -1)
            {
                drYetki = YetkiListesi.Yetki.NewYetkiRow();
                drYetki.YetkiID = YeniIDGetir(YetkiListesi.Yetki.TableName);
                drYetki.Silindi = false;
            }
            else
            {
                drYetki = YetkiListesi.Yetki.FindByYetkiID(SecilenYetkiID);
            }

            if (txtMenu.MenuID != -1)
                drYetki.MenuID = Convert.ToInt32(txtMenu.MenuID);
            else
            {
                drYetki.SetMenuIDNull();
            }
            drYetki.YetkiAdi = txtYetkiAdi.Text.Trim();

            if (SecilenYetkiID == -1)
            {
                YetkiListesi.Yetki.AddYetkiRow(drYetki);
            }

            if (YetkiListesi.HasChanges())
            {
                YetkiIsKurali oYetki = new YetkiIsKurali();
                FonksiyonSonuc<Boolean> oSonuc = oYetki.YetkiKaydet((YetkiDataSet)YetkiListesi.GetChanges());

                if (oSonuc.HataVarMi)
                {
                    YetkiListesi.RejectChanges();
                    throw new Exception(oSonuc.Hata);
                }

                YetkiListesi.AcceptChanges();

                grdListe.DataSource = YetkiListesi;
                grdListe.DataBind();
            }
            FormTemizle();
            //mv.SetActiveView(vListe);

            //MesajGoster(Page, "Yetki bilgisi başarı ile kaydedilmiştir.", MesajTipiEnum.Bilgi);
        }

        protected void btnYeniKayit_Click(object sender, EventArgs e)
        {
            if (!YetkiAraci.YetkiliMi(EnumYetkiler.YetkiYeniKayit, Response)) return;

            FormTemizle();
            mv.SetActiveView(vKayit);
        }

        protected void btnGeri_Click(object sender, EventArgs e)
        {
            FormTemizle();
            mv.SetActiveView(vListe);
        }

        protected void btnListele_Click(object sender, EventArgs e)
        {
            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<YetkiDataSet> fsYetki = oYetki.YetkiGetirKriterli(txtYetkiAdiAra.Text);
            if (fsYetki.HataVarMi)
                throw new Exception(fsYetki.Hata);

            YetkiListesi = fsYetki.Sonuc;
            grdListe.DataSource = YetkiListesi;
            grdListe.DataBind();
        }

        #endregion

        #region Event ve Fonksiyonlar

        protected void grdListe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdListe.DataSource = YetkiListesi;
            grdListe.PageIndex = e.NewPageIndex;
            grdListe.DataBind();
        }

        protected void grdListe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Page")
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                int YetkiID = Convert.ToInt32(grdListe.DataKeys[rowIndex].Value.ToString());

                if (e.CommandName == "Guncelle")
                {
                    if (!YetkiAraci.YetkiliMi(EnumYetkiler.YetkiGüncelle, Response)) return;

                    FormHazirla(YetkiID);
                    mv.SetActiveView(vKayit);
                }
                else if (e.CommandName == "Sil")
                {
                    if (!YetkiAraci.YetkiliMi(EnumYetkiler.YetkiSil, Response)) return;

                    YetkiDataSet.YetkiRow drYetki = YetkiListesi.Yetki.FindByYetkiID(YetkiID);
                    drYetki.Silindi = true;

                    YetkiIsKurali oYetki = new YetkiIsKurali();
                    FonksiyonSonuc<Boolean> oSonuc = oYetki.YetkiKaydet((YetkiDataSet)YetkiListesi.GetChanges());

                    if (oSonuc.HataVarMi)
                    {
                        YetkiListesi.RejectChanges();
                        throw new Exception(oSonuc.Hata);
                    }

                    YetkiListesi.AcceptChanges();

                    grdListe.DataSource = YetkiListesi;
                    grdListe.DataBind();

                    MesajGoster(Page, "Yetki bilgisi başarı ile silinmiştir.", MesajTipiEnum.Bilgi);

                }
            }
        }

        private void FormHazirla(int YetkiID)
        {
            YetkiDataSet.YetkiRow drYetki = YetkiListesi.Yetki.FindByYetkiID(YetkiID);

            txtMenu.MenuID = (int)(!drYetki.IsMenuIDNull() ? drYetki.MenuID : -1);
            txtYetkiAdi.Text = drYetki.YetkiAdi;
            SecilenYetkiID = YetkiID;
        }

        private void FormTemizle()
        {
            txtYetkiAdi.Text = "";
            txtMenu.Clear();
            SecilenYetkiID = -1;
        }

        #endregion

        protected void grdListe_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
            {
                YetkiDataSet.YetkiRow drYetki = (YetkiDataSet.YetkiRow)((DataRowView)e.Row.DataItem).Row;
                if (!drYetki.IsMenuIDNull())
                {
                    MenuDataSet.MenuRow drMenu = null;//CachePage.MenuRowGetir(drYetki.MenuID);
                    if (drMenu != null)
                        e.Row.Cells[2].Text = drMenu.MenuAdi;
                }

                e.Row.Cells[3].Text = "";//((EnumEvetHayir)drYetki.Silindi.GetHashCode()).ToString();

            }
        }

    }

}